import { Instance, SnapshotOut, types } from "mobx-state-tree"
import { BetRecordStoreModel } from "./bet-record-store"
import { LoginStoreModel } from "../login"
import { RegisterStoreModel } from "../register"
import { GlobalStoreModel } from "../global"
import { MineStoreModel } from "../mine"
import { EventStoreModel } from "../event"

/**
 * An RootStore model.
 */
export const RootStoreModel = types.model("RootStore").props({
  betRecordStore: types.optional(BetRecordStoreModel, {}),
  loginStore: types.optional(LoginStoreModel, {}),
  registerStore: types.optional(RegisterStoreModel, {}),
  globalStore: types.optional(GlobalStoreModel, {}),
  mineStore: types.optional(MineStoreModel, {}),
  eventStore: types.optional(EventStoreModel, {})
})

/**
 * The RootStore instance.
 */
export type RootStore = Instance<typeof RootStoreModel>

/**
 * The data of an RootStore.
 */
export type RootStoreSnapshot = SnapshotOut<typeof RootStoreModel>
